import com.alibaba.fastjson.JSON;
import org.apache.commons.io.FileUtils;

import java.io.*;

/**
 * 批量重命名哔哩哔哩缓存文件的视频名字,不改变原视频格式
 * 只需修改文件夹所在目录即可
 */

public class RenameAndMoveVideo {

    public static void main(String[] args) {
        String path = "/Users/suxiaomeng/Desktop/81386804";    //要遍历的路径,根据文件地址作修改
        File file = new File(path);        //获取其file对象
        func(file);
    }

    private static void func(File file) {

        File[] fs = file.listFiles();
        for (File f : fs) {
            if (f.isDirectory())    //若是目录，则递归打印该目录下的文件
            {
                func(f);
            }
            if (f.getName().contains("entry.json")) {
                String content = null;
                try {
                    content = FileUtils.readFileToString(f, "UTF-8");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //获取原文件路径
                String oldPath = f.getPath().replace("entry.json", "");

                //新的文件路径基础路径
                String newPath = "/Users/suxiaomeng/Study/视频/";
                //获取课程名称
                String newDirectoryName = JSON.parseObject(content).getString("title");
                // String newPath = "/Users/suxiaomeng/Study/视频/黑马Java基础+就业班+各种项目idea版本";//视频放的新地址
                newPath += newDirectoryName;

                //判断是否存在该文件夹，不存在则新建
                isChartPathExist(newPath);

                //获取父文件夹名称，用于序列号命名
                String parent = f.getParentFile().getName();

                //读取json文件中该段视频段名称
                String newFileName = JSON.parseObject(content).getJSONObject("page_data").getString("part") + ".blv";
                //String newFileName = parent+"-"+JSON.parseObject(content).getJSONObject("page_data").getString("part") + ".blv";

                //读取视频缓存目录文件夹名称
                String typeTag = JSON.parseObject(content).getString("type_tag");

                System.out.println("main.func：新文件路径=" + newPath);
                System.out.println("main.func：父文件夹名称=" + parent);
                System.out.println("main.func：课程名称=" + newDirectoryName);
                System.out.println("main.func：视频缓存目录文件夹名称=" + typeTag);
                System.out.println("main.func：该段视频名称=" + newFileName);

                //获取原目录下的原文件
                File oldfile = new File(oldPath + typeTag + "/0.blv"); //指定文件名及路径
                //重命名并移动到新目录
                if (oldfile.renameTo(new File(newPath + "/" + newFileName))) {
                    System.out.println("修改成功!");
                } else {
                    System.out.println("修改失败");
                }

            }
        }
    }

    //读取json文件
    public static String readJsonFile(String fileName) {
        String jsonStr = "";
        try {
            File jsonFile = new File(fileName);
            FileReader fileReader = new FileReader(jsonFile);
            Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
            int ch = 0;
            StringBuffer sb = new StringBuffer();
            while ((ch = reader.read()) != -1) {
                sb.append((char) ch);
            }
            fileReader.close();
            reader.close();
            jsonStr = sb.toString();
            return jsonStr;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    //dirPath 文件夹磁盘路径 
    private static void isChartPathExist(String dirPath) {

        File file = new File(dirPath);
        if (!file.exists()) {
            file.mkdirs();
        } else {
            System.out.println(dirPath + " 该文件夹已经存在！");
        }
    }
}